1. Field of the Invention
The present invention is directed to real-time, dynamically composing and executing complex tasks based upon semantically described application-, device- and service-rich computing environments.
2. Description of the Related Art
Personal Computing may be referred to as a paradigm in which a user operates a single device and accesses/uses applications that reside on that device. Personal computing requires that the user has a sufficient understanding of the user's computing environment and of the applications that are available on the user's computer, so that as a knowledgeable user, the user can adequately utilize the available resources to execute complex tasks. This is computing as most users experience it on a daily basis; the burden of learning how to achieve complex tasks resides with the user, who has to understand each of the applications running on the user's machine and of the functions that the user's machine supports, to manually transfer data between applications (cut & paste), to manually invoke each application and the specific functionality that relates to the task and to eventually devote full attention (and time) to the execution of the complex task.
A shift from Personal Computing to a more task-oriented view of the computing environment, would be as follows:
For example, as one feature of an operating system, when the user inserts a music CD into the CD tray, a window pops up suggesting to the user tasks the user can perform from that point on. A typical listing of these options can include:                Play Audio CD        Copy Music from CD        Open folder to view files        Take no action        
Each of these options also mentions the application to be used to perform the action. The focus is on the action, or task to be performed rather than the application used to perform the task.
However, here the operating system uses a pre-specified list of actions, or tasks, that are associated with the occurrence of a specific event (inserting a music CD, or connecting a digital camera), so that when the event occurs, the relevant listing of actions is presented to the user to act upon. In that sense, the system's response is hardwired and does not include flexibility beyond that which as been programmed into the system as to the possible actions to be performed as a result of the triggering event. In other words, the system shows the same set of the actions that can take place when a digital camera is connected to the computer; the programmer of the operating system has prepared this specific list of actions for the particular event. Applications can change the items in the list, but there is not an easy way for end-users to change it.
In another example of an operating system, the user may be presented with a choice of actions depending on a file type. That is, a separate list of tasks is presented to the user for each of the following file types: Documents, Pictures, Photo Album, Music, Music Artist, Music Album, and Videos. For example, if the file type is a picture, a list of “picture tasks” is presented:                View (pictures) as a slide show        Order prints online        Print the picture        Set the picture as background        Copy pictures to a CD        
This list of tasks is again pre-compiled and associated with the specific file type. There is not an easy way for end-users to modify the list.
In another example of office suite software, a smart tags feature is available. The smart tag feature highlights text in the current document while using an editor and offers the user a drop down menu of actions that can be performed with the object that that text denotes. For example, if the text represents a name, then this feature may identify the object associated with that name to be a person, and may offer the following list of possible actions:                Send mail (to that person)        Schedule a meeting (with that person)        Open Contact (of that person)        Create a Contact (for that person)        
The options are enabled by identifying that the string of characters in the document might represent a name. The system relies on the syntactic features of the text to identify that this particular piece of text represents a name. However, a string of characters that does not resemble a typical American name (e.g., Lusheng Ji), may not be identified as a name related to a person. The reason is that the part of the system that identifies a piece of text as a name is a pretty simple program (script) that attempts to identify easily identifiable patterns in the syntactic form of the text. Once the “nature” of the text is identified (correctly or incorrectly), e.g., person, address, etc., a pre-compiled list of possible actions is presented to the user. It is possible for application programmers to create smart tags for other domains and applications, such as identifying addresses and invoking a map application, etc.
Another example of an attempt to present to the user a more task-oriented view of the computing environment is now discussed. When a user types an address in the search box of a search engine, the service will return (above the usual search results) a link to a mapping function that, if followed, will provide a map of the address.
However, it is not obvious that the user might be searching for the map of the typed address. Other reasonable possibilities exist: the user might want a phone number listing associated with this address, or if that address is a business, the user might want to see the BETTER BUSINESS BUREAU record for the searched business, or to check the weather in that vicinity, and so on. In its current form, the search engine guesses what type of “thing” (in this case an address) the typed text stands for and it returns a hard-wired task associated with this type of entry.
Therefore, in a task-oriented view of the computing environment, the focus is on the task that can be performed and not on the application to be used for executing the task. Moreover the user does not need to know which application will be used for the task. If the user chooses to execute one of the suggested tasks, the proper application will be instantiated accordingly and invoked (launched).
However, the computing examples mentioned above exhibit similar features that do not allow real-time, dynamic composition of executable tasks, as follows. In some manner, the type or nature of the user's input (text or event) is guessed; in effect the system attempts to infer the meaning (semantics) of a string, relying on its syntactic features. A system makes a guess of plausible tasks that the user might wish to perform given that input; that guess is hardwired into the system, so effectively it is not the system that makes the guess in real time, but it is the programmer of the system that made the guess when programming the system, way before the user interacts with the system. The appropriate application is automatically invoked upon the user's selection (whatever the user selected in a second step), instantiated with the proper input (whatever the system guessed in a first step), a static cause-effect (or trigger-response) mechanism.
Although the above computing examples can increase the user's convenience, the conventional systems still retain the following personal computing features:
The functionality has been designed into the application; the application's programmers have programmed (hard-wired) the system's response. As a result, this is not a flexible and scalable approach because the range of possibilities has been decided during design time.
The system has limited ways to accommodate the user's actions and wishes, and it cannot accurately “perceive” the nature (semantics or meaning) of the input. Despite the different technologies used in each of the examples, the system relies on correctly guessing the meaning of the input by its syntactic features.
The conventional personal computing system employs a cause-effect (or trigger-response) mechanism, in the sense that a certain type of input results to a single action (application invocation).
Also, Personal Computing, i.e., the idea of a user owning and operating a computer that runs the user's applications and “holds” the user's data is giving way to computing environments with less well-defined boundaries. As computers get permanently connected to computer networks, the distinctions between local and remote applications and data collapse, or even worse, they are confusing to computer users. Moreover, users can access and interact with devices that are not computers in the sense of personal computers but still possess significant computing power and can serve the users' goals and help them accomplish a variety of tasks (cameras, printers, smart appliances, etc.). For one thing, the average user may not even be aware of what is possible or feasible in such computing environments, as available resources (devices and applications) may be constantly changing. In other words, the personal computing approach is infeasible in a setting replete with devices and applications that are not a priori known to the user.
Accordingly, there is a need to real-time, dynamically, discover, publish, compose, manage, and execute tasks in a computing environment, often referred to as ubiquitous pervasive computing environment, which requires a fundamentally different approach to the problem of the user accomplishing tasks in the computing environment.